FEXP Solver  1.0.0.0
FEXPCommon.h File Reference
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cwchar>
#include <cstddef>
#include <memory>
#include <numeric>
#include <locale>
#include <utility>
#include <sstream>
#include <stdarg.h>
#include <functional>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <stack>
#include <queue>
#include <iostream>
#include <fstream>
#include <filesystem>
#include <io.h>
#include <iomanip>
#include <climits>
#include <algorithm>
#include <chrono>
#include <ctime>
#include <typeinfo>
#include <type_traits>
#include <cmath>
#include <array>
#include <typeindex>
#include <exception>
#include <thread>
#include <future>
#include <mutex>
#include <condition_variable>
#include <Winsock2.h>
#include <Ws2tcpip.h>
Include dependency graph for FEXPCommon.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  cfexp_is_fun_ptr< TFunc >
 
struct  function_traits< TClassType >
 
struct  function_traits< TReturnType(TClassType::*)(Args...) const >
 
struct  function_traits< TReturnType(TClassType::*)(Args...)>
 
struct  function_traits< TReturnType(*)(Args...)>
 
class  CFEXPDataManager< TType >
 Smart pointer. More...
 
class  CFEXPSmartPointer< TType >
 
class  CFEXPDataManager< TType >
 Smart pointer. More...
 
class  ICFEXPDataWrapperBase< TData, TKey >
 Base wrapper for items in container. More...
 
class  ICFEXPDataContainerBase< TWrapper, TData, TKey, Enable >
 
class  ICFEXPDataContainerBase< TWrapper, TData, TKey, std::enable_if< std::is_base_of< ICFEXPDataWrapperBase< TData, TKey >, TWrapper >::value >::type >
 Base interface for the data containers. More...
 
class  ICFEXPMatrixBufferBase< TValue >
 Base interface for matrixe memory. More...
 
class  CFEXPMatrixBufferArray< TValue >
 Matrix memory based on a simple array. More...
 
class  CFEXPMatrixBufferStdVector< TValue >
 Matrix memory based on std::vector. More...
 
class  CFEXPMatrixBufferStdMap< TValue >
 Matrix memory based on std::map. More...
 
class  CFEXPMatrixBase< TBuffer, TValue, Enable >
 
class  CFEXPMatrixBase< TBuffer, TValue, std::enable_if< std::is_base_of< ICFEXPMatrixBufferBase< TValue >, TBuffer< TValue > >::value >::type >
 Base interface for matrix. More...
 
class  CFEXPGeneralMatrix2DVect< TValue >
 General 2D matrix based on std::vector. More...
 
class  CFEXPMatrix2D
 2D matrix for floating point data. More...
 
class  CFEXPBaseConvers
 General functions for various conversions. More...
 
class  ICFEXPValueConverterBase
 
class  CFEXPValueConverter< TValue >
 
class  CFEXPValueConverter< std::string >
 
class  CFEXPSafeConcurencyConsolePrint
 
class  CFEXPLog
 

Namespaces

 FEXPFEDefinition
 

Macros

#define FEXPCOMMON_CONSOLE_OUT   std::cout
 
#define FEXPCOMMON_CONSOLE_SAFE_THREAD_OUT   CFEXPSafeConcurencyConsolePrint{ }
 It is thread safe printing to a console. More...
 
#define FEXPCOMMON_CONSOLE_PAUSE(manager)   if(!manager) system("PAUSE")
 
#define FEXPCOMMON_CMD_EXE_PATH_INDEX   0
 
#define FEXPCOMMON_CMD_MANAGER_INDEX   1
 
#define FEXPCOMMON_CMD_SERVER_IP_INDEX   2
 
#define FEXPCOMMON_CMD_SERVER_PORT_INDEX   3
 
#define FEXPCOMMON_CMD_MAX_LENGTH   4
 
#define FEXPCOMMON_CMD_MIN_LENGTH   2
 
#define FEXPCOMMON_WIN_VISTA   NTDDI_VISTA
 
#define FEXPCOMMON_WIN_7   NTDDI_WIN7
 
#define FEXPCOMMON_WIN_8   NTDDI_WIN8
 
#define FEXPCOMMON_WIN_10   NTDDI_WIN8
 
#define FEXPCOMMON_MY_WIN_VERSION_FOR_COMPILATION   FEXPCOMMON_WIN_7
 
#define STRUCT_KEYS(fstrct, eidntfier)   fstrct[(eidntfier)]
 
#define LAZY_ALLC(alloclass, baseclass)   []()->Ptr<baseclass> { return CFEXPDataManager<alloclass>::SafeAllocInstance(); }
 
#define CLS_KEY(alloclass)   alloclass::ID
 
#define CLS_MAP_PAIR(fstrct, alloclass, baseclass)   { STRUCT_KEYS(fstrct, CLS_KEY(alloclass)), LAZY_ALLC(alloclass, baseclass) }
 
#define FEXPCOMMON_STACAST(clsfrom, clsto, variable)   Ptr<clsfrom>::SafeSmartPtrStatCast<clsto>(variable)
 
#define FEXPCOMMON_DYNCAST(clsfrom, clsto, variable)   Ptr<clsfrom>::SafeSmartPtrDnmcCast<clsto>(variable)
 
#define FEXPCOMMON_EXCEPTION(error_text)   throw std::runtime_error(error_text)
 
#define FEXPCOMMON_NOT_IMPLEMENTED_EX   FEXPCOMMON_EXCEPTION("Not implemented!!!")
 
#define FEXPCOMMON_MIN(X, Y)   (((X) < (Y)) ? (X) : (Y))
 
#define FEXPCOMMON_MAX(X, Y)   (((X) > (Y)) ? (X) : (Y))
 
#define FEXPCOMMON_FOREACH(start, end, index)   for(index = (start); index <= (end); ++index)
 
#define FEXPCOMMON_FOREACH_REV(start, end, index)   for(index = (start); index >= (end); --index)
 
#define IT   current_item_for_each
 
#define FEXPCOMMON_FOREACH_ITER(data)   for (auto IT = (data).begin(); IT != (data).end(); ++IT)
 
#define FEXPCOMMON_FOREACH_ITER_FNC(data, lambda_body)   std::for_each((data).begin(), (data).end(), [&](auto IT) lambda_body)
 
#define FEXPCOMMON_BUFFER_LINE_LEN   1024
 
#define FEXPCOMMON_MIN_VALUE   1.0E-6
 
#define FEXPCOMMON_FLT_PRECISION   1.0E-7
 
#define FEXPCOMMON_FLT_PRECISION_DIGITS   7
 
#define FEXPCOMMON_FLT_MAX   (std::numeric_limits<float>::max() / 2.0)
 
#define FEXPCOMMON_DBL_PRECISION   1.0E-15
 
#define FEXPCOMMON_DBL_PRECISION_DIGITS   15
 
#define FEXPCOMMON_DBL_MAX   (std::numeric_limits<double>::max() / 2.0)
 
#define FEXPCOMMON_INVALID_INDX   -1
 
#define FEXPCOMMON_DEFAULT_INDX   0
 
#define FEXPCOMMON_PI   3.14159265358979323846
 
#define FEXPCOMMON_NO_VALUE_STR   "No value"
 
#define FEXPCOMMON_MAXFLDS   10
 
#define FEXPCOMMON_MAXFLDSIZE   32
 
#define FEXPCOMMON_EMPTY   0
 
#define FEXPCOMMON_DEFAULT_VALUE   0
 
#define FEXPCOMMON_DELIMITER   ";"
 
#define FEXPCOMMON_KEY_BLOCK_IDNTF   "#"
 
#define FEXPCOMMON_KEY_TABLE_IDNTF   "$"
 
#define FEXPCOMMON_EMPTY_STRING   ""
 
#define FEXPCOMMON_EMCHR_STRING   " "
 
#define FEXPCOMMON_NEW_LINE   "\n"
 
#define FEXPCOMMON_QUEST_MARK_CHAR   '?'
 
#define FEXPCOMMON_ZERO_END_CHAR   '\0'
 
#define FEXPCOMMON_ZERO_END_WCHAR   L'\0'
 
#define FEXPCOMMON_DFLT_TXT   (std::string("@FEXP") + FEXPCOMMON_DELIMITER)
 
#define FEXPCOMMON_DATA_TYPE(type)   std::type_index(typeid(type))
 
#define FEXPCOMMON_DATA_TYPE_NAME(type)   FEXPCOMMON_DATA_TYPE(type).name()
 
#define FEXPCOMMON_CLCFLT_TYPE   FEXPCOMMON_DATA_TYPE(t_fexpcommon_ct)
 
#define FEXPCOMMON_SIZE_T_TYPE   FEXPCOMMON_DATA_TYPE(size_t )
 
#define FEXPCOMMON_STRING_TYPE   FEXPCOMMON_DATA_TYPE(std::string )
 
#define FEXPCOMMON_CLCFLT_TYPE_NAME   FEXPCOMMON_DATA_TYPE_NAME(t_fexpcommon_ct)
 
#define FEXPCOMMON_SIZE_T_TYPE_NAME   FEXPCOMMON_DATA_TYPE_NAME(size_t )
 
#define FEXPCOMMON_STRING_TYPE_NAME   FEXPCOMMON_DATA_TYPE_NAME(std::string )
 
#define GET_MAX_FLT_VAL(type)
 
#define GET_MIN_FLT_VAL(type)
 
#define GET_FLT_PRECIS_DIGIT(type)
 
#define GET_MAX_SIZE_T_VAL()   std::numeric_limits<size_t>::max()
 
#define MAP_PAIR(key, itm)   std::make_pair(key, itm)
 
#define MATRIX_ERROR_SET   "Error: Matrix is not initialized: \"Set Action\"!!!"
 
#define MATRIX_ERROR_GET   "Error: Matrix is not initialized: \"Get Action\"!!!"
 
#define FEXPCOMMON_COMPARE_EQ   0
 
#define FEXPCOMMON_COMPARE_1V   1
 
#define FEXPCOMMON_COMPARE_2V   2
 

Typedefs

using t_fexpcommon_ct = double
 
template<typename TType >
using Ptr = CFEXPSmartPointer< TType >
 

Enumerations

enum  FEXPFEDefinition::EFEXPFiniteElementGeom {
  FEXPFEDefinition::eNotDef, FEXPFEDefinition::eFE_1D_in2D, FEXPFEDefinition::eFE_2D_in2D, FEXPFEDefinition::eFE_2D_in3D,
  FEXPFEDefinition::eFE_3D, FEXPFEDefinition::eFECount
}
 Type of FE geometry. More...
 
enum  FEXPFEDefinition::EFEXPFiniteElementType { FEXPFEDefinition::eNoElement = 0, FEXPFEDefinition::eFeShellTriag, FEXPFEDefinition::eFeBrickSolidTriag, FEXPFEDefinition::eFeCount }
 Type of FE. More...
 

Functions

template<typename TLambda >
function_traits< TLambda >::f_type make_function (TLambda value)
 
std::string GetModulePath ()
 
std::string GetConfigPath (std::string fname) noexcept(false)
 
std::tuple< std::string, size_t, std::string, size_t > GetCmdContent (int argc, char *argv[]) noexcept(false)
 
void TRACE (const char *format,...)
 

Macro Definition Documentation

◆ CLS_KEY

#define CLS_KEY (   alloclass)    alloclass::ID

◆ CLS_MAP_PAIR

#define CLS_MAP_PAIR (   fstrct,
  alloclass,
  baseclass 
)    { STRUCT_KEYS(fstrct, CLS_KEY(alloclass)), LAZY_ALLC(alloclass, baseclass) }

◆ FEXPCOMMON_BUFFER_LINE_LEN

#define FEXPCOMMON_BUFFER_LINE_LEN   1024

◆ FEXPCOMMON_CLCFLT_TYPE

#define FEXPCOMMON_CLCFLT_TYPE   FEXPCOMMON_DATA_TYPE(t_fexpcommon_ct)

◆ FEXPCOMMON_CLCFLT_TYPE_NAME

#define FEXPCOMMON_CLCFLT_TYPE_NAME   FEXPCOMMON_DATA_TYPE_NAME(t_fexpcommon_ct)

◆ FEXPCOMMON_CMD_EXE_PATH_INDEX

#define FEXPCOMMON_CMD_EXE_PATH_INDEX   0

◆ FEXPCOMMON_CMD_MANAGER_INDEX

#define FEXPCOMMON_CMD_MANAGER_INDEX   1

◆ FEXPCOMMON_CMD_MAX_LENGTH

#define FEXPCOMMON_CMD_MAX_LENGTH   4

◆ FEXPCOMMON_CMD_MIN_LENGTH

#define FEXPCOMMON_CMD_MIN_LENGTH   2

◆ FEXPCOMMON_CMD_SERVER_IP_INDEX

#define FEXPCOMMON_CMD_SERVER_IP_INDEX   2

◆ FEXPCOMMON_CMD_SERVER_PORT_INDEX

#define FEXPCOMMON_CMD_SERVER_PORT_INDEX   3

◆ FEXPCOMMON_COMPARE_1V

#define FEXPCOMMON_COMPARE_1V   1

◆ FEXPCOMMON_COMPARE_2V

#define FEXPCOMMON_COMPARE_2V   2

◆ FEXPCOMMON_COMPARE_EQ

#define FEXPCOMMON_COMPARE_EQ   0

◆ FEXPCOMMON_CONSOLE_OUT

#define FEXPCOMMON_CONSOLE_OUT   std::cout

◆ FEXPCOMMON_CONSOLE_PAUSE

#define FEXPCOMMON_CONSOLE_PAUSE (   manager)    if(!manager) system("PAUSE")

◆ FEXPCOMMON_CONSOLE_SAFE_THREAD_OUT

#define FEXPCOMMON_CONSOLE_SAFE_THREAD_OUT   CFEXPSafeConcurencyConsolePrint{ }

It is thread safe printing to a console.

◆ FEXPCOMMON_DATA_TYPE

#define FEXPCOMMON_DATA_TYPE (   type)    std::type_index(typeid(type))

◆ FEXPCOMMON_DATA_TYPE_NAME

#define FEXPCOMMON_DATA_TYPE_NAME (   type)    FEXPCOMMON_DATA_TYPE(type).name()

◆ FEXPCOMMON_DBL_MAX

#define FEXPCOMMON_DBL_MAX   (std::numeric_limits<double>::max() / 2.0)

◆ FEXPCOMMON_DBL_PRECISION

#define FEXPCOMMON_DBL_PRECISION   1.0E-15

◆ FEXPCOMMON_DBL_PRECISION_DIGITS

#define FEXPCOMMON_DBL_PRECISION_DIGITS   15

◆ FEXPCOMMON_DEFAULT_INDX

#define FEXPCOMMON_DEFAULT_INDX   0

◆ FEXPCOMMON_DEFAULT_VALUE

#define FEXPCOMMON_DEFAULT_VALUE   0

◆ FEXPCOMMON_DELIMITER

#define FEXPCOMMON_DELIMITER   ";"

◆ FEXPCOMMON_DFLT_TXT

#define FEXPCOMMON_DFLT_TXT   (std::string("@FEXP") + FEXPCOMMON_DELIMITER)

◆ FEXPCOMMON_DYNCAST

#define FEXPCOMMON_DYNCAST (   clsfrom,
  clsto,
  variable 
)    Ptr<clsfrom>::SafeSmartPtrDnmcCast<clsto>(variable)

◆ FEXPCOMMON_EMCHR_STRING

#define FEXPCOMMON_EMCHR_STRING   " "

◆ FEXPCOMMON_EMPTY

#define FEXPCOMMON_EMPTY   0

◆ FEXPCOMMON_EMPTY_STRING

#define FEXPCOMMON_EMPTY_STRING   ""

◆ FEXPCOMMON_EXCEPTION

#define FEXPCOMMON_EXCEPTION (   error_text)    throw std::runtime_error(error_text)

◆ FEXPCOMMON_FLT_MAX

#define FEXPCOMMON_FLT_MAX   (std::numeric_limits<float>::max() / 2.0)

◆ FEXPCOMMON_FLT_PRECISION

#define FEXPCOMMON_FLT_PRECISION   1.0E-7

◆ FEXPCOMMON_FLT_PRECISION_DIGITS

#define FEXPCOMMON_FLT_PRECISION_DIGITS   7

◆ FEXPCOMMON_FOREACH

#define FEXPCOMMON_FOREACH (   start,
  end,
  index 
)    for(index = (start); index <= (end); ++index)

◆ FEXPCOMMON_FOREACH_ITER

#define FEXPCOMMON_FOREACH_ITER (   data)    for (auto IT = (data).begin(); IT != (data).end(); ++IT)

◆ FEXPCOMMON_FOREACH_ITER_FNC

#define FEXPCOMMON_FOREACH_ITER_FNC (   data,
  lambda_body 
)    std::for_each((data).begin(), (data).end(), [&](auto IT) lambda_body)

◆ FEXPCOMMON_FOREACH_REV

#define FEXPCOMMON_FOREACH_REV (   start,
  end,
  index 
)    for(index = (start); index >= (end); --index)

◆ FEXPCOMMON_INVALID_INDX

#define FEXPCOMMON_INVALID_INDX   -1

◆ FEXPCOMMON_KEY_BLOCK_IDNTF

#define FEXPCOMMON_KEY_BLOCK_IDNTF   "#"

◆ FEXPCOMMON_KEY_TABLE_IDNTF

#define FEXPCOMMON_KEY_TABLE_IDNTF   "$"

◆ FEXPCOMMON_MAX

#define FEXPCOMMON_MAX (   X,
 
)    (((X) > (Y)) ? (X) : (Y))

◆ FEXPCOMMON_MAXFLDS

#define FEXPCOMMON_MAXFLDS   10

◆ FEXPCOMMON_MAXFLDSIZE

#define FEXPCOMMON_MAXFLDSIZE   32

◆ FEXPCOMMON_MIN

#define FEXPCOMMON_MIN (   X,
 
)    (((X) < (Y)) ? (X) : (Y))

◆ FEXPCOMMON_MIN_VALUE

#define FEXPCOMMON_MIN_VALUE   1.0E-6

◆ FEXPCOMMON_MY_WIN_VERSION_FOR_COMPILATION

#define FEXPCOMMON_MY_WIN_VERSION_FOR_COMPILATION   FEXPCOMMON_WIN_7

◆ FEXPCOMMON_NEW_LINE

#define FEXPCOMMON_NEW_LINE   "\n"

◆ FEXPCOMMON_NO_VALUE_STR

#define FEXPCOMMON_NO_VALUE_STR   "No value"

◆ FEXPCOMMON_NOT_IMPLEMENTED_EX

#define FEXPCOMMON_NOT_IMPLEMENTED_EX   FEXPCOMMON_EXCEPTION("Not implemented!!!")

◆ FEXPCOMMON_PI

#define FEXPCOMMON_PI   3.14159265358979323846

◆ FEXPCOMMON_QUEST_MARK_CHAR

#define FEXPCOMMON_QUEST_MARK_CHAR   '?'

◆ FEXPCOMMON_SIZE_T_TYPE

#define FEXPCOMMON_SIZE_T_TYPE   FEXPCOMMON_DATA_TYPE(size_t )

◆ FEXPCOMMON_SIZE_T_TYPE_NAME

#define FEXPCOMMON_SIZE_T_TYPE_NAME   FEXPCOMMON_DATA_TYPE_NAME(size_t )

◆ FEXPCOMMON_STACAST

#define FEXPCOMMON_STACAST (   clsfrom,
  clsto,
  variable 
)    Ptr<clsfrom>::SafeSmartPtrStatCast<clsto>(variable)

◆ FEXPCOMMON_STRING_TYPE

#define FEXPCOMMON_STRING_TYPE   FEXPCOMMON_DATA_TYPE(std::string )

◆ FEXPCOMMON_STRING_TYPE_NAME

#define FEXPCOMMON_STRING_TYPE_NAME   FEXPCOMMON_DATA_TYPE_NAME(std::string )

◆ FEXPCOMMON_WIN_10

#define FEXPCOMMON_WIN_10   NTDDI_WIN8

◆ FEXPCOMMON_WIN_7

#define FEXPCOMMON_WIN_7   NTDDI_WIN7

◆ FEXPCOMMON_WIN_8

#define FEXPCOMMON_WIN_8   NTDDI_WIN8

◆ FEXPCOMMON_WIN_VISTA

#define FEXPCOMMON_WIN_VISTA   NTDDI_VISTA

◆ FEXPCOMMON_ZERO_END_CHAR

#define FEXPCOMMON_ZERO_END_CHAR   '\0'

◆ FEXPCOMMON_ZERO_END_WCHAR

#define FEXPCOMMON_ZERO_END_WCHAR   L'\0'

◆ GET_FLT_PRECIS_DIGIT

#define GET_FLT_PRECIS_DIGIT (   type)
Value:
#define FEXPCOMMON_DBL_PRECISION_DIGITS
Definition: FEXPCommon.h:168
#define FEXPCOMMON_DATA_TYPE_NAME(type)
Definition: FEXPCommon.h:193
#define FEXPCOMMON_FLT_PRECISION_DIGITS
Definition: FEXPCommon.h:165

◆ GET_MAX_FLT_VAL

#define GET_MAX_FLT_VAL (   type)
Value:
#define FEXPCOMMON_FLT_MAX
Definition: FEXPCommon.h:166
#define FEXPCOMMON_DATA_TYPE_NAME(type)
Definition: FEXPCommon.h:193
#define FEXPCOMMON_DBL_MAX
Definition: FEXPCommon.h:169

◆ GET_MAX_SIZE_T_VAL

#define GET_MAX_SIZE_T_VAL ( )    std::numeric_limits<size_t>::max()

◆ GET_MIN_FLT_VAL

#define GET_MIN_FLT_VAL (   type)
Value:
#define FEXPCOMMON_DATA_TYPE_NAME(type)
Definition: FEXPCommon.h:193
#define FEXPCOMMON_FLT_PRECISION
Definition: FEXPCommon.h:164
#define FEXPCOMMON_DBL_PRECISION
Definition: FEXPCommon.h:167

◆ IT

#define IT   current_item_for_each

◆ LAZY_ALLC

#define LAZY_ALLC (   alloclass,
  baseclass 
)    []()->Ptr<baseclass> { return CFEXPDataManager<alloclass>::SafeAllocInstance(); }

◆ MAP_PAIR

#define MAP_PAIR (   key,
  itm 
)    std::make_pair(key, itm)

◆ MATRIX_ERROR_GET

#define MATRIX_ERROR_GET   "Error: Matrix is not initialized: \"Get Action\"!!!"

◆ MATRIX_ERROR_SET

#define MATRIX_ERROR_SET   "Error: Matrix is not initialized: \"Set Action\"!!!"

◆ STRUCT_KEYS

#define STRUCT_KEYS (   fstrct,
  eidntfier 
)    fstrct[(eidntfier)]

Typedef Documentation

◆ Ptr

template<typename TType >
using Ptr = CFEXPSmartPointer<TType>

◆ t_fexpcommon_ct

using t_fexpcommon_ct = double

Function Documentation

◆ GetCmdContent()

std::tuple<std::string, size_t, std::string, size_t> GetCmdContent ( int  argc,
char *  argv[] 
)
noexcept

◆ GetConfigPath()

std::string GetConfigPath ( std::string  fname)
noexcept

◆ GetModulePath()

std::string GetModulePath ( )

◆ make_function()

template<typename TLambda >
function_traits<TLambda>::f_type make_function ( TLambda  value)

◆ TRACE()

void TRACE ( const char *  format,
  ... 
)